package apis

import (
	"go-admin/app/monitor/models"
	"go-admin/app/monitor/service"

	"github.com/gin-gonic/gin"
	"github.com/go-admin-team/go-admin-core/sdk/api"
)

// go-admin框架下 接口层必备结构体
type SysApi struct {
	api.Api
}

// @version v1
// @Summary 查询各客户端主机资源使用百分比 v1
// @Description 查询各客户端主机资源使用百分比 v1
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /v1/percent [get]
// @Security Bearer
func (e SysApi) GetPercent(c *gin.Context) {
	// 业务实现层对象
	s := service.SysApi{}
	// 这里的链式操作是为了检查各所需的对象是否正确初始化，基本上每个接口都带有这一串玩意。实际上是将所需的对象传递到需要的位置
	err := e.MakeContext(c). // 这里是为了将gin.Context这个http连接实例赋值给SysApi这个对象，并且为它获取了日志的对象以过程中的日志操作
					MakeOrm().               // 为了获取db对象，并将指针拷贝给SysApi的对象
					MakeService(&s.Service). // 这一步是将上面获取日志对象和db对象赋值给业务实现层对象s，然后由它去完成操作。
					Errors                   // 过程中如果有哪一步有错，就会提取到错误，否则err为 nil
	// 判断是否有错
	if err != nil {
		e.Logger.Error(err)
		e.Error(500, err, err.Error())
		return
	}
	tables := make([]string, 0) // 储存从数据库获取的数据的列表
	err = s.GetTables(&tables)  //获取数据的实现
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	var sourceLsit []models.Computer
	err = s.GetPercent(&tables, &sourceLsit)
	if err != nil {
		e.Error(500, err, "查询失败")
		return
	}
	e.OK(sourceLsit, "查询成功")
}
